﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace IFramework
{
    public interface IPoolManager
    {
        T GetPoolObj<T>(object PoolObjParent, params object[] paras) where T : IPoolObj, new();
        T GetInitObj<T>(T prefab, object PoolObjParent, params object[] paras) where T : UnityEngine.Object, IPoolObj;

        void Restore(Type poolType, IPoolObj poolObj, object poolObjParent, params object[] paras);
        void Restore(Type poolType, IPoolObj poolObj, params object[] paras);
        void Restore(Type poolType, object poolObjParent, params object[] paras);
        void Restore(Type poolType, params object[] paras);

        void Restore(Type poolType, IPoolObj[] poolObjs, object poolObjParent, params object[] paras);
        void Restore(Type poolType, IPoolObj[] poolObjs, params object[] paras);

        void Restore(IPoolObj poolObj,object poolObjParent ,params object[] paras);
        void Restore(IPoolObj poolObj, params object[] paras);
        void Restore(IPoolObj[] poolObjs, params object[] paras);

        void Restore(object poolObjParent, params object[] paras);

        void Restore<T>(IPoolObj poolObj, object poolObjParent, params object[] paras);
        void Restore<T>(IPoolObj poolObj, params object[] paras);
        void Restore<T>(object poolObjParent, params object[] paras);
        void Restore<T>(params object[] paras);

        void Restore<T>(IPoolObj[] poolObjs, object poolObjParent, params object[] paras);
        void Restore<T>(IPoolObj[] poolObjs, params object[] paras);

        void Clean(Type type, params object[] paras);
        void Clean<T>(params object[] paras);
        void Clean(IPoolObj[] poolObjs, params object[] paras);
        void Clean(object parentObj, params object[] paras);
        void Clean(IPoolObj poolObj, params object[] paras);
        void OnClean(IPoolObj poolObj);


    }
}